merge)Doposud jsme pracovali jen na jedné větvi – master (nebo main).
Větve slouží k tomu, abychom mohli vyvíjet více variant projektu nezávisle na sobě.
master/main) – stabilní verze projektu.Představ si větve jako „paralelní časové linie“. Každá má vlastní historii commitů, ale mohou se kdykoliv spojit (merge).
$ git branch nova-funkce
Tím se vytvoří větev nova-funkce.
Seznam všech větví:
$ git branch
Aktuální větev je označena hvězdičkou:
* master
nova-funkce
$ git checkout nova-funkce
Od teď se všechny nové commity ukládají do větve nova-funkce. V hlavní větvi (master) se nic nezmění.
Návrat zpět:
$ git checkout master
merge) Pokud je funkce hotová a chceme ji vrátit do hlavní větve:
Přepni se na hlavní větev:
$ git checkout master
Sluč změny:
$ git merge nova-funkce
Hotovo – změny z vedlejší větve se přidají do master.
Větve = paralelní vývojové linie.
Hlavní větev (master) je stabilní, ostatní větve slouží k experimentům a vývoji.
Základní příkazy:
git branch – výpis větví / vytvoření nové větve
git checkout <větev> – přepnutí na větev
git merge <větev> – spojení větve s aktuální
Nejprve si založíme nový soubor recept.txt a přidáme do něj tento obsah:
Recept na bábovku
=================
Uděláme commit:
$ git add -A
$ git commit -m "Vytvořen soubor recept.txt"
$ git branch babovka2
Výpis větví:
$ git branch
* master
babovka2
$ git checkout babovka2
Upravíme soubor recept.txt:
Recept na bábovku
=================
Mouka
Vejce
Olej
Mléko
Cukr
Commit na větvi babovka2:
$ git add -A
$ git commit -m "Přidány suroviny na bábovku"
$ git checkout master
Soubor recept.txt nyní obsahuje jen:
Recept na bábovku
=================
Tj. změny z větve babovka2 tu nejsou.
⚠️ Při slučování musíme být ve té větvi, do které chceme mergovat jinou větev. V této ukázce jsme ve větvi master do které chceme sloučit změny z větve babovka2.
$ git checkout master
$ git merge babovka2
Výstup bude něco jako:
Updating 8e3111c..f19a959
Fast-forward
recept.txt | 1 +
1 file changed, 1 insertion(+)
Teď i na hlavní větvi (master) vidíš změnu:
Recept na bábovku
=================
Mouka
Vejce
Olej
Mléko
Cukr
Při práci s větvemi se může stát, že dva lidé upraví stejný řádek ve stejném souboru. Git pak neví, kterou verzi má použít, a označí to jako konflikt. Nejde o chybu, ale o přirozenou situaci, kdy musí rozhodnout člověk.
Máme soubor recept.txt:
Recept na bábovku
=================
Mouka
Vejce
Olej
Mléko
Cukr
Ve větvi master někdo změní řádek souboru recept.txt na:
Recept na bábovku
=================
Mouka
Vejce 3 ks
Olej
Mléko
Cukr
Ve větvi babovka2 někdo změní stejný řádek v souboru recept.txt jinak:
Recept na bábovku
=================
Mouka
Vejce 4 ks
Olej
Mléko
Cukr
Když Git zkusí sloučit babovka2 do master, zobrazí konflikt:
<<<<<<< HEAD
Vejce 3 ks
=======
Vejce 4 ks
>>>>>>> babovka2
Otevřeme soubor recept.txt:
<<<<<<< HEAD
Vejce 3 ks
=======
Vejce 4 ks
>>>>>>> babovka2
Ručně vybereme správnou verzi a to tak, že smažeme oba řádky s šipkami (<<<<<<< HEAD a >>>>>>> nova-vetev), řádek s ======= a ponecháme pouze jednu variantu, např. Vejce 4 ks:
...
Vejce 4 ks
...
Následně označíme soubor jako vyřešený:
git add recept.txt
Dokončíme merge commitem:
git commit -m "vyřešen konflikt v souboru recept.txt"
✅ Tímto je konflikt vyřešen a můžeme pokračovat dál.
Větve jsou silný nástroj. I když je nepoužíváš denně, je i tak dobré vědět, že existují a k čemu slouží.
Případné konflikty se musí vyřešit ručně. Git (ani žádný jiný VCS) to sám nezvládne.